Full source code giải đố hình đơn giản
16.632 lượt xem;
- PuzzleGameManager.cs
- Puzzle Game Controller /
- Scripts /
- Assets /
- project /
1 using UnityEngine;
2 using System.Collections;
3 using System.Collections.Generic;
4 using UnityEngine.UI;
5
6 public class PuzzleGameManager : MonoBehaviour
7 {
8 [SerializeField]
9 private PuzzleGameSaver puzzleGameSaver;
10
11 [SerializeField]
12 private GameFinished gameFinished;
13
14 private List<Button> puzzleButtons = new List<Button>();
15
16 private List<Animator> puzzleButtonsAnimators = new List<Animator>();
17 [SerializeField]
18 private List<Sprite> gamePuzzleSprites = new List<Sprite>();
19
20 private int level;
21 private string selectedPuzzle;
22
23 private Sprite puzzleBackgroundImage;
24
25 private bool firstGuess, secondGuess;
26 private int firstGuessIndex, secondGuessIndex;
27 private string firstGuessPuzzle, secondGuessPuzzle;
28
29 private int countTryGuess;
30
31 private int countCorrectGuess;
32 private int gameGuess;
33
34 public void PickAPuzzle()
35 {
36
37 if(!firstGuess)
38 {
39 firstGuess = true;
40
41 firstGuessIndex = int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
42
43 firstGuessPuzzle = gamePuzzleSprites[firstGuessIndex].name;
44
45 StartCoroutine(
46 TurnPuzzleButtonUp(puzzleButtonsAnimators[firstGuessIndex],
47 puzzleButtons[firstGuessIndex],
48 gamePuzzleSprites[firstGuessIndex]));
49
50 } else if (!secondGuess)
51 {
52 secondGuess = true;
53
54 secondGuessIndex = int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
55
56 secondGuessPuzzle = gamePuzzleSprites[secondGuessIndex].name;
57
58
59 StartCoroutine(
60 TurnPuzzleButtonUp(puzzleButtonsAnimators[secondGuessIndex],
61 puzzleButtons[secondGuessIndex],
62 gamePuzzleSprites[secondGuessIndex]));
63
64
65 StartCoroutine(CheckIfThePuzzlesMatch(puzzleBackgroundImage));
66
67 countTryGuess++;
68
69 Debug.Log("First Guess is " + firstGuessPuzzle + "and Second guess is " + secondGuessPuzzle);
70
71
72 }
73
74
75
76 }
77
78 IEnumerator CheckIfThePuzzlesMatch(Sprite puzzleBackgroundImage)
79 {
80 yield return new WaitForSeconds(1.7f);
81
82 if (firstGuessPuzzle == secondGuessPuzzle)
83 {
84 puzzleButtonsAnimators[firstGuessIndex].Play("FadeOut");
85 puzzleButtonsAnimators[secondGuessIndex].Play("FadeOut");
86
87 CheckIfTheGameIsFinished();
88 // increment score
89 } else
90 {
91 StartCoroutine(
92 TurnPuzzleButtonBack(puzzleButtonsAnimators[firstGuessIndex],
93 puzzleButtons[firstGuessIndex],
94 puzzleBackgroundImage));
95
96 StartCoroutine(
97 TurnPuzzleButtonBack(puzzleButtonsAnimators[secondGuessIndex],
98 puzzleButtons[secondGuessIndex],
99 puzzleBackgroundImage));
100 }
101
102 yield return new WaitForSeconds(0.7f);
103
104 firstGuess = secondGuess = false;
105 }
106
107 void CheckIfTheGameIsFinished()
108 {
109 countCorrectGuess++;
110
111 if (countCorrectGuess == gameGuess)
112 {
113 Debug.Log("Game Ends No More Puzzles");
114 CheckHowManyGuesses();
115 }
116
117 }
118
119 void CheckHowManyGuesses ()
120 {
121 int howManyGuesses = 0;
122
123 switch (level)
124 {
125 case 0:
126 howManyGuesses = 5;
127 break;
128
129 case 1:
130 howManyGuesses = 10;
131 break;
132
133 case 2:
134 howManyGuesses = 15;
135 break;
136
137 case 3:
138 howManyGuesses = 20;
139 break;
140
141 case 4:
142 howManyGuesses = 25;
143 break;
144 }
145
146 if (countTryGuess < howManyGuesses)
147 {
148 gameFinished.ShowGameFinishedPanel(3);
149
150 puzzleGameSaver.Save(level, selectedPuzzle, 3);
151
152 } else if (countTryGuess > howManyGuesses && countTryGuess < (howManyGuesses + 5))
153 {
154 gameFinished.ShowGameFinishedPanel(2);
155
156 puzzleGameSaver.Save(level, selectedPuzzle, 2);
157
158 } else
159 {
160 gameFinished.ShowGameFinishedPanel(1);
161
162 puzzleGameSaver.Save(level, selectedPuzzle, 1);
163 }
164 }
165
166 public List<Animator> ResetGameplay()
167 {
168 firstGuess = secondGuess = false;
169
170 countTryGuess = 0;
171 countCorrectGuess = 0;
172
173 gameFinished.HideGameFinishedPanel();
174
175 return puzzleButtonsAnimators;
176 }
177
178
179 IEnumerator TurnPuzzleButtonUp(Animator anim, Button btn, Sprite puzzleImage)
180 {
181 anim.Play("TurnUp");
182 yield return new WaitForSeconds(.4f);
183 btn.image.sprite = puzzleImage;
184 }
185
186 IEnumerator TurnPuzzleButtonBack(Animator anim, Button btn, Sprite puzzleImage)
187 {
188 anim.Play("TurnDown");
189 yield return new WaitForSeconds(.4f);
190 btn.image.sprite = puzzleImage;
191 }
192
193 void AddListeners()
194 {
195 foreach (Button btn in puzzleButtons)
196 {
197 btn.onClick.RemoveAllListeners();
198 btn.onClick.AddListener(() => PickAPuzzle());
199 }
200 }
201
202 public void SetUpButtonsAndAnimators(List<Button> buttons, List<Animator> animators)
203 {
204 this.puzzleButtons = buttons;
205 this.puzzleButtonsAnimators = animators;
206
207 gameGuess = puzzleButtons.Count / 2;
208
209 puzzleBackgroundImage = puzzleButtons[0].image.sprite;
210
211 AddListeners();
212
213 }
214
215 public void SetGamePuzzleSprites(List<Sprite> gamePuzzleSprites)
216 {
217 this.gamePuzzleSprites = gamePuzzleSprites;
218 }
219
220 public void SetLevel(int level)
221 {
222 this.level = level;
223 }
224
225 public void SetSelectedPuzzle(string selectedPuzzle)
226 {
227 this.selectedPuzzle = selectedPuzzle;
228 }
229
230 } // PuzzleGameManager
2 using System.Collections;
3 using System.Collections.Generic;
4 using UnityEngine.UI;
5
6 public class PuzzleGameManager : MonoBehaviour
7 {
8 [SerializeField]
9 private PuzzleGameSaver puzzleGameSaver;
10
11 [SerializeField]
12 private GameFinished gameFinished;
13
14 private List<Button> puzzleButtons = new List<Button>();
15
16 private List<Animator> puzzleButtonsAnimators = new List<Animator>();
17 [SerializeField]
18 private List<Sprite> gamePuzzleSprites = new List<Sprite>();
19
20 private int level;
21 private string selectedPuzzle;
22
23 private Sprite puzzleBackgroundImage;
24
25 private bool firstGuess, secondGuess;
26 private int firstGuessIndex, secondGuessIndex;
27 private string firstGuessPuzzle, secondGuessPuzzle;
28
29 private int countTryGuess;
30
31 private int countCorrectGuess;
32 private int gameGuess;
33
34 public void PickAPuzzle()
35 {
36
37 if(!firstGuess)
38 {
39 firstGuess = true;
40
41 firstGuessIndex = int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
42
43 firstGuessPuzzle = gamePuzzleSprites[firstGuessIndex].name;
44
45 StartCoroutine(
46 TurnPuzzleButtonUp(puzzleButtonsAnimators[firstGuessIndex],
47 puzzleButtons[firstGuessIndex],
48 gamePuzzleSprites[firstGuessIndex]));
49
50 } else if (!secondGuess)
51 {
52 secondGuess = true;
53
54 secondGuessIndex = int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
55
56 secondGuessPuzzle = gamePuzzleSprites[secondGuessIndex].name;
57
58
59 StartCoroutine(
60 TurnPuzzleButtonUp(puzzleButtonsAnimators[secondGuessIndex],
61 puzzleButtons[secondGuessIndex],
62 gamePuzzleSprites[secondGuessIndex]));
63
64
65 StartCoroutine(CheckIfThePuzzlesMatch(puzzleBackgroundImage));
66
67 countTryGuess++;
68
69 Debug.Log("First Guess is " + firstGuessPuzzle + "and Second guess is " + secondGuessPuzzle);
70
71
72 }
73
74
75
76 }
77
78 IEnumerator CheckIfThePuzzlesMatch(Sprite puzzleBackgroundImage)
79 {
80 yield return new WaitForSeconds(1.7f);
81
82 if (firstGuessPuzzle == secondGuessPuzzle)
83 {
84 puzzleButtonsAnimators[firstGuessIndex].Play("FadeOut");
85 puzzleButtonsAnimators[secondGuessIndex].Play("FadeOut");
86
87 CheckIfTheGameIsFinished();
88 // increment score
89 } else
90 {
91 StartCoroutine(
92 TurnPuzzleButtonBack(puzzleButtonsAnimators[firstGuessIndex],
93 puzzleButtons[firstGuessIndex],
94 puzzleBackgroundImage));
95
96 StartCoroutine(
97 TurnPuzzleButtonBack(puzzleButtonsAnimators[secondGuessIndex],
98 puzzleButtons[secondGuessIndex],
99 puzzleBackgroundImage));
100 }
101
102 yield return new WaitForSeconds(0.7f);
103
104 firstGuess = secondGuess = false;
105 }
106
107 void CheckIfTheGameIsFinished()
108 {
109 countCorrectGuess++;
110
111 if (countCorrectGuess == gameGuess)
112 {
113 Debug.Log("Game Ends No More Puzzles");
114 CheckHowManyGuesses();
115 }
116
117 }
118
119 void CheckHowManyGuesses ()
120 {
121 int howManyGuesses = 0;
122
123 switch (level)
124 {
125 case 0:
126 howManyGuesses = 5;
127 break;
128
129 case 1:
130 howManyGuesses = 10;
131 break;
132
133 case 2:
134 howManyGuesses = 15;
135 break;
136
137 case 3:
138 howManyGuesses = 20;
139 break;
140
141 case 4:
142 howManyGuesses = 25;
143 break;
144 }
145
146 if (countTryGuess < howManyGuesses)
147 {
148 gameFinished.ShowGameFinishedPanel(3);
149
150 puzzleGameSaver.Save(level, selectedPuzzle, 3);
151
152 } else if (countTryGuess > howManyGuesses && countTryGuess < (howManyGuesses + 5))
153 {
154 gameFinished.ShowGameFinishedPanel(2);
155
156 puzzleGameSaver.Save(level, selectedPuzzle, 2);
157
158 } else
159 {
160 gameFinished.ShowGameFinishedPanel(1);
161
162 puzzleGameSaver.Save(level, selectedPuzzle, 1);
163 }
164 }
165
166 public List<Animator> ResetGameplay()
167 {
168 firstGuess = secondGuess = false;
169
170 countTryGuess = 0;
171 countCorrectGuess = 0;
172
173 gameFinished.HideGameFinishedPanel();
174
175 return puzzleButtonsAnimators;
176 }
177
178
179 IEnumerator TurnPuzzleButtonUp(Animator anim, Button btn, Sprite puzzleImage)
180 {
181 anim.Play("TurnUp");
182 yield return new WaitForSeconds(.4f);
183 btn.image.sprite = puzzleImage;
184 }
185
186 IEnumerator TurnPuzzleButtonBack(Animator anim, Button btn, Sprite puzzleImage)
187 {
188 anim.Play("TurnDown");
189 yield return new WaitForSeconds(.4f);
190 btn.image.sprite = puzzleImage;
191 }
192
193 void AddListeners()
194 {
195 foreach (Button btn in puzzleButtons)
196 {
197 btn.onClick.RemoveAllListeners();
198 btn.onClick.AddListener(() => PickAPuzzle());
199 }
200 }
201
202 public void SetUpButtonsAndAnimators(List<Button> buttons, List<Animator> animators)
203 {
204 this.puzzleButtons = buttons;
205 this.puzzleButtonsAnimators = animators;
206
207 gameGuess = puzzleButtons.Count / 2;
208
209 puzzleBackgroundImage = puzzleButtons[0].image.sprite;
210
211 AddListeners();
212
213 }
214
215 public void SetGamePuzzleSprites(List<Sprite> gamePuzzleSprites)
216 {
217 this.gamePuzzleSprites = gamePuzzleSprites;
218 }
219
220 public void SetLevel(int level)
221 {
222 this.level = level;
223 }
224
225 public void SetSelectedPuzzle(string selectedPuzzle)
226 {
227 this.selectedPuzzle = selectedPuzzle;
228 }
229
230 } // PuzzleGameManager